package br.com.advance.automacao.services.impl;

import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import br.com.advance.automacao.dao.TurnoDao;
import br.com.advance.automacao.model.Turno;
import br.com.advance.automacao.services.TurnoService;
import br.com.advance.automacao.services.exceptions.ValidationException;

@Service
@Transactional("transactionManager")
public class TurnoServiceImpl implements TurnoService {

	private static final Logger logger = Logger
			.getLogger(TurnoServiceImpl.class);

	@Autowired
	private TurnoDao turnoDao;

	@Override
	public Turno criar(Turno turno) throws ValidationException {
		validarDados(turno);
		return turnoDao.create(turno);
	}

	@Override
	public Turno atualizar(Turno turno) throws ValidationException {
		validarDados(turno);
		return turnoDao.update(turno);
	}

	private void validarDados(Turno turno) throws ValidationException {
		Turno turnoEncontrado = turnoDao.buscarPorCodigo(turno.getCodigo());
		if(turnoEncontrado != null && (turno.getId() == null || !turnoEncontrado.getId().equals(turno.getId()))) {
			throw new ValidationException("Código já cadastrado");
		}

		/*turnoEncontrado = turnoDao.buscarTurnoPeloHorario(turno.getHoraInicio());
		if(turnoEncontrado != null && (turno.getId() == null || !turnoEncontrado.getId().equals(turno.getId()))) {
			throw new ValidationException("Hora de ínicio dentro de tempo do turno código: " + turnoEncontrado.getCodigo());
		}

		turnoEncontrado = turnoDao.buscarTurnoPeloHorario(turno.getHoraInicio());
		if(turnoEncontrado != null && (turno.getId() == null || !turnoEncontrado.getId().equals(turno.getId()))) {
			throw new ValidationException("Hora de fim dentro de tempo do turno código: " + turnoEncontrado.getCodigo());
		}*/
	}

	@Override
	public Turno buscarPorId(Long id) {
		return turnoDao.findById(id);
	}

	@Override
	public List<Turno> buscarTurnosPelaDataCLP(Date data, Long idCLP) {
		return turnoDao.buscarTurnosPelaDataCLP(data, idCLP);
	}

	@Override
	public Turno buscarTurnoPeloHorario(Date date) {
		return turnoDao.buscarTurnoPeloHorario(date);
	}

	@Override
	public List<Turno> buscarTodos() {
		return turnoDao.findAll();
	}

}
